Route Model Binding with Custom Query Constraints


Route model binding with query constraints is used to ensure that only specific models are bound, this will optimize both performance and security.

// Define a route with custom model binding constraint
Route::get('user/{user}', [UserController::class, 'show'])
    ->where('user', '^[0-9]+$');

// Define a custom model binding logic in RouteServiceProvider
public function boot()
{
    parent::boot();

    Route::bind('user', function ($value) {
        return User::where('id', $value)
                    ->where('status', 'active')
                    ->firstOrFail();
    });
}

Route::get('user/{user}', [UserController::class, 'show'])->where('user', '^[0-9]+$'): Defines a route with a custom constraint ensuring the {user} parameter only matches numeric values.

Route::bind('user', function ($value) { ... }): Customizes how the user parameter is resolved. This example adds a constraint that the user must be active, enhancing security and data integrity.

You Might Also Like

Hash Passwords Securely

Always hash passwords using Laravel's built-in Hash facade. Never store plain-text passwords in your...

Route Resource Controllers for CRUD Operations

Resource controllers simplifies CRUD operations and keeps codebase organized and maintainable by fol...